<?php
/**
 *
 */
class PostProvider{

    /**
     * 当前页数
     */
    private $nowPage;

    /**
     * 分页大小
     */
    private $pageSize;

    /**
     * 总页数
     */
    private $totalPages;

    /**
     * 分页起始处,用于Query中的limit部分
     */
    private $firstRow;

    /**
     * dao对象
     */
    private $dao;

    /**
     * 记录集
     */
    private $rs;

    /**
     * 当前行下标
     */
    private $index;

    /**
     * 最大下标值
     */
    private $rs_count;

    /**
     * 表前缀
     */
    private $db_prefix;

    /**
     * 构造函数
     *
     * 参考query方法
     */
    public function __construct($conds,$pagination){
        $this->dao = get_instance_of('Model');
        $this->db_prefix = C('db_prefix');
    }

    /**
     * 获取数据
     * @param $conds['category'] 指定从哪些栏目获取文档
     * @param $conds['row'] 指定获取多少条记录，当使用了分页后，此处设的值会覆盖pageSize
     * @param $conds['thumb'] 指定缩略图的处理方法,取值：true,false。当1时必须包含缩略图，为0时不包含，若不设定此项，则忽略缩略图的影响
     * @param $conds['order'] 排序顺序，默认按id desc排序，可以设置为click、pubdate
     *
     * @param <boolean> pagination 是否进行分页处理，默认不进行。如果在执行query方法前执行了setPage方法，则将进行分页
     */
    public function query($conds,$pagination = true){
        $whereCond = "m.lft='post' and m.rgt='category'";
        if(array_key_exists('category',$conds)){
            $whereCond .= " and m.many in ('{$conds['category']}')";
        }
        if(array_key_exists('thumb',$conds)){
            //
        }
        if($this->isPagination($pagination)){
            //获取总记录数
            if(array_key_exists('row',$conds)) $this->pageSize($conds['row']);
            $this->totalPages = $this->dao->table($this->db_prefix.'one2many')
                        ->where("lft='post' and rgt='category'")
                        ->count('distinct one');
            echo $this->dao->getLastSql().'<br/>';
            if($this->totalPages == 0){
                return null;
            }
            $this->firstRow = intval($this->pageSize) * ($this->nowPage - 1);
            $this->dao->limit($this->firstRow.','.$this->pageSize);
        }
        $this->rs = $this->dao->field('p.id,p.title,p.created pubdate,u.account poster,p.status,p.thumb,group_concat(c.name) typename,group_concat(c.id) typeid')
                         ->table("{$this->db_prefix}one2many m")
                         ->join("{$this->db_prefix}category c on c.id=m.many")
                         ->join("{$this->db_prefix}post p on p.id=m.one")
                         ->join("{$this->db_prefix}user u on u.id=p.userid")
                         ->group('p.id desc')
                         ->where($whereCond)
                         ->findAll();
        $this->rs_count = empty($this->rs) ? 0 : count($this->rs);
        $this->index = 0;
            echo $this->dao->getLastSql().'<br/>';
    }

    /**
     * 返回当前post集的总记录数
     */
    public function count(){
        return $this->rs_count;
    }

    /**
     * 设置/获取分页大小
     */
    public function pageSize($size = ''){
        if(empty($size)){
            return $this->pageSize;
        }
        $this->pageSize = $size;
    }

    /**
     * 设定分页参数
     *
     * @param $nowPage 当前页数
     * @param $pageSize 每页显示记录数
     */
    public function setPage($nowPage,$pageSize = 10){
        $this->nowPage = $nowPage;
        $this->pageSize($pageSize);
    }

    /*
     * 测试是否需要进行分页
     */
    private function isPagination($pagination = false){
        if(false === empty($this->pageSize) ){
            return true;
        }
        if($pagination === true){
            if(empty($this->nowPage)) $this->nowPage = 1;
            if(empty($this->pageSize)) $this->pageSize = 10;
            return true;
        }
        return false;
    }

    /**
     * 返回总页数
     */
    public function pageCount(){
        return $this->totalPages;
    }

    /**
     * 测试是否还有post
     */
    public function have_post(){
        return ($this->index < $this->rs_count) ? true : false;
    }

    /**
     * 将当前post设置为下一个
     */
    public function next(){
        $this->index++;
    }

    /**
     * 将当前post设置为上一个
     */
    public function prev(){
    }

    /**
     * 返回当前post
     */
    public function current(){
    }

    /**
     * 将当前post设置为第一个
     */
    public function reset(){

    }

    /**
     * 将当前post设置为最后一个
     */
    public function end(){

    }

    /**
     * 获取当前post相关的上一个post
     */
    public function prev_relative(){

    }

    /**
     * 获取与当前post相关的下一个post
     */
    public function next_relative(){

    }

    /**
     * 获取post的某个字段
     */
    public function __get($name){
        if($this->have_post()){
            $data = $this->rs[$this->index];
            return isset($data[$name]) ? $data[$name] : '';
        }
        return '';
    }

    /**
     * 获取post的某个字段，支持格式化
     */
    public function format($field,$formatPattern = ''){

    }


    /**
     * 重置一些成员值
     */
    private function init(){
        $this->totalPages = null;
        $this->pageSize = null;
        $this->nowPage = null;
    }




}
